
let activeEffect;
export const effect = (fn: Function) => {
    // 依赖收集
    const _effect = function () {
        activeEffect = _effect
        fn ()
    }

    _effect()

}

// 依赖收集
const targetMap = new WeakMap()
export const track = (target, key) => {
    let depsMap = targetMap.get(target)
    if(!depsMap) {
        depsMap = new Map()
        targetMap.set(target, depsMap) 
    }
    let deps = depsMap.get(key)
    if (!deps) {
        deps = new Set()
        depsMap.set(key, deps)
    }

    deps.add(activeEffect)
}

// 触发依赖
export const trigger = (target, key) => {
    const depsMap = target.get(target)
    const deps = depsMap.get(key)

    deps.forEach(effect => effect());
}